import axios from 'axios'
import store from '@/store'
import router from '@/router'
import { Toast } from 'vant'

// 创建一个新的axios对象并设置基地址
const request = axios.create({
  baseURL: 'http://geek.itheima.net/'
})

// 请求拦截
request.interceptors.request.use(config => {
  // 判断有没有token
  if (store.state.user.tokenObj.token) {
    // 携带token
    config.headers.Authorization = 'Bearer ' + store.state.user.tokenObj.token
  }
  return config
}, err => {
  return Promise.reject(err)
})

// 响应拦截
request.interceptors.response.use(response => {
  // 数据剥离
  return response.data
}, async err => {
  if (err.response.status === 401) {
    try {
    // 利用refresh_token去刷新得到最新token
    // 用aixos、用axios、用axios
      const res = await axios({
        url: 'http://geek.itheima.net/v1_0/authorizations',
        method: 'put',
        headers: {
          Authorization: `Bearer ${store.state.user.tokenObj.refresh_token}`
        }
      })

      store.commit('user/setToken', {
        token: res.data.data.token,
        refresh_token: store.state.user.tokenObj.refresh_token
      })
      // 想把它原本想发的请求的结果给返回
      return request(err.config)
    } catch {
      Toast('登录状态过期，请重新登录！')
      router.push('/login')
    }
  } else {
    // 其他报错就抛出错误
    return Promise.reject(err)
  }
})

// 暴露对象
export default request
